package ar.edu.utn.frba.disenio;

import java.math.BigDecimal;
import java.util.ArrayList;

import org.joda.time.DateTime;

import ar.edu.utn.frba.disenio.aerolineas.Aerolinea;
import ar.edu.utn.frba.disenio.filtros.Filtro;

public class Asiento {

	private Aerolinea aerolinea;
	private String codigoVuelo;
	private int numeroAsiento;
	private BigDecimal precio;
	private String clase;
	private String ubicacion;
	private boolean reservado;
	private int dniCliente;
	private String origen;
	private String destino;
	private DateTime salida;
	private DateTime llegada;


	public boolean cumpleCon(ArrayList<Filtro> filtros) 
	{
		for(Filtro filtro : filtros)
		{
			if(!filtro.esCumplidoPor(this))
			{
				return false;
			}
		}
		return true;
	}
	
	public boolean esSuperOferta() 
	{
		return (this.clase == "P" && this.getPrecio().compareTo(new BigDecimal(8000)) == -1) 
			|| (this.clase == "E" && this.getPrecio().compareTo(new BigDecimal(4000)) == -1);
	}
	
	@Override
	public String toString() {
		return "Asiento [origen=" + origen + ", destino=" + destino
				+ ", salida=" + salida + ", llegada=" + llegada + "]";
	}
	
	public String getCodigo()
	{
		return this.getCodigoVuelo() + "-" + this.getNumeroAsiento();
	}
	
	public Aerolinea getAerolinea() {
		return aerolinea;
	}

	public void setAerolinea(Aerolinea aerolinea) {
		this.aerolinea = aerolinea;
	}
	
	public BigDecimal getPrecio() {
		return precio;
	}

	public void setPrecio(BigDecimal precioBasico, BigDecimal impuestos, BigDecimal recargo) {
		this.precio = precioBasico.multiply(impuestos).add(recargo).add(precioBasico);
	}

	public String getClase() {
		return clase;
	}

	public void setClase(String clase) {
		this.clase = clase;
	}

	public String getUbicacion() {
		return ubicacion;
	}

	public void setUbicacion(String ubicacion) {
		this.ubicacion = ubicacion;
	}

	public boolean getReservado() {
		return reservado;
	}

	public void setReservado(boolean estado) {
		this.reservado = estado;
	}

	public int getDniCliente() {
		return dniCliente;
	}

	public void setDniCliente(int dniCliente) {
		this.dniCliente = dniCliente;
	}

	public String getOrigen() {
		return origen;
	}

	public void setOrigen(String origen) {
		this.origen = origen;
	}

	public String getDestino() {
		return destino;
	}

	public void setDestino(String destino) {
		this.destino = destino;
	}

	public void setPrecio(BigDecimal precio) {
		this.precio = precio;
	}

	public String getCodigoVuelo() {
		return codigoVuelo;
	}

	public void setCodigoVuelo(String codigoVuelo) {
		this.codigoVuelo = codigoVuelo;
	}

	public int getNumeroAsiento() {
		return numeroAsiento;
	}

	public void setNumeroAsiento(int numeroAsiento) {
		this.numeroAsiento = numeroAsiento;
	}

	public DateTime getSalida() {
		return salida;
	}

	public void setSalida(DateTime salida) {
		this.salida = salida;
	}

	public DateTime getLlegada() {
		return llegada;
	}

	public void setLlegada(DateTime llegada) {
		this.llegada = llegada;
	}
}
